# exit_file("TODO")
source("helpers.R")
# exit_file("screenshot problems")
requiet("estimatr")
requiet("flextable")
requiet("tinysnapshot")
using("tinysnapshot")
if (ON_CI) exit_file("CI")

mod <- list(
  lm(hp ~ mpg, mtcars),
  lm(hp ~ mpg + drat, mtcars)
)

# table objects from different packages: no error
otp <- c(
  "gt",
  "kableExtra",
  "flextable",
  "huxtable",
  "html",
  "latex",
  "markdown"
)
for (o in otp) {
  tab <- modelsummary(mod, output = o)
}

# unsupported output
expect_error(modelsummary(mod, "bad"))
expect_error(modelsummary(mod, "htm"))
expect_error(modelsummary(mod, "t.est"))

# supported global options
random <- random_string()

# RTF
filename <- paste0(random, ".rtf")
options(modelsummary_factory_rtf = "gt")
tab <- modelsummary(mod, filename)
unlink(filename)

# HTML
filename <- paste0(random, ".html")
options(modelsummary_factory_html = "gt")
tab <- modelsummary(mod, filename)
unlink(filename)
options(modelsummary_factory_html = "kableExtra")
tab <- modelsummary(mod, filename)
unlink(filename)
options(modelsummary_factory_html = "flextable")
tab <- modelsummary(mod, filename)
unlink(filename)
options(modelsummary_factory_html = "huxtable")
tab <- modelsummary(mod, filename)
unlink(filename)
options(modelsummary_factory_html = NULL)


# unsupported global options

options(modelsummary_factory_rtf = "kableExtra")
expect_error(modelsummary(mod, "test.rtf"))
options(modelsummary_factory_rtf = "gt")

options(modelsummary_factory_word = "kableExtra")
expect_error(modelsummary(mod, "test.docx"))
options(modelsummary_factory_word = "gt")
expect_error(modelsummary(mod, "test.docx"))
options(modelsummary_factory_word = "flextable")

options(modelsummary_factory_powerpoint = "kableExtra")
expect_error(modelsummary(mod, "test.pptx"))
options(modelsummary_factory_powerpoint = "gt")
expect_error(modelsummary(mod, "test.pptx"))
options(modelsummary_factory_powerpoint = "flextable")

## webshot breaks in tinytest
# options(modelsummary_factory_png = 'huxtable')
# expect_error(modelsummary(mod, 'test.png'))
# unlink("test.png")
# options(modelsummary_factory_png = NULL)

# options(modelsummary_factory_jpg = 'huxtable')
# expect_error(modelsummary(mod, 'test.jpg'))
# options(modelsummary_factory_jpg = 'gt')
# expect_error(modelsummary(mod, 'test.jpg'))
# options(modelsummary_factory_jpg = 'kableExtra')

# save to file
random <- random_string()

filename <- paste0(random, ".html")
tab <- modelsummary(mod, filename)
unlink(filename)

filename <- paste0(random, ".rtf")
tab <- modelsummary(mod, filename)
unlink(filename)

filename <- paste0(random, ".tex")
tab <- modelsummary(mod, filename)
unlink(filename)

filename <- paste0(random, ".md")
tab <- modelsummary(mod, filename)
unlink(filename)

filename <- paste0(random, ".docx")
tab <- modelsummary(mod, filename)
unlink(filename)

filename <- paste0(random, ".pptx")
tab <- modelsummary(mod, filename)
unlink(filename)

# filename <- paste0(random, '.jpg')
# tab <- modelsummary(mod, filename)
# unlink(filename)

## webshot breaks in tinytest
# options(modelsummary_factory_png = NULL)
# filename <- paste0(random, ".png")
# tab <- modelsummary(mod, filename)
# unlink(filename)

# overwrite file
options(modelsummary_factory_html = NULL)
random <- random_string()
filename <- paste0(random, ".html")
modelsummary(mod, filename)
unlink(filename)

######################################
# datasummary_balance #
######################################

# output formats do not produce errors
tmp <- mtcars
tmp$cyl <- as.character(tmp$cyl)
tmp$vs <- as.logical(tmp$vs)
otp <- c(
  "tinytable",
  "huxtable",
  "flextable",
  "kableExtra",
  "dataframe",
  "markdown",
  "latex",
  "html"
)
for (o in otp) {
  tab <- datasummary_balance(~am, tmp, output = o)
}


#  add_columns output formats work  #
tmp <- mtcars
tmp$cyl <- as.character(tmp$cyl)
tmp$vs <- as.logical(tmp$vs)
custom <- data.frame("a" = 1:2, "b" = 1:2)
output_formats <- c(
  "tinytable",
  "gt",
  "kableExtra",
  "flextable",
  "huxtable",
  "latex",
  "markdown",
  "html"
)
for (o in output_formats) {
  testname <- paste("add_columns with", o)
  tab <- datasummary_balance(~am, tmp, add_columns = custom, output = o)
}

#  save to file  #
tmp <- mtcars
tmp$cyl <- as.factor(tmp$cyl)
tmp$vs <- as.logical(tmp$vs)
tmp$am <- as.character(tmp$am)
save_to_file <- function(ext) {
  msg <- paste("save to", ext)
  random <- random_string()
  filename <- paste0(random, ext)
  tab <- datasummary_balance(~am, data = tmp, output = filename)
  unlink(filename)
}

## webshot breaks in tinytest
# options(modelsummary_factory_png = NULL)
# for (ext in c(".html", ".tex", ".docx", ".png")) {
#   save_to_file(ext)
# }

###################################
# "output: datasummary_skim"
###################################

dat <- mtcars
dat$vs <- as.logical(dat$vs)
dat$gear <- as.factor(dat$gear)

# write to file
## webshot2 breaks in tinytest
# datasummary_skim(dat, output = "test.png")
# datasummary_skim(dat, type = "categorical", output = "test.png")
datasummary_skim(dat, output = "test.html")
datasummary_skim(dat, type = "categorical", output = "test.html")

# unlink("test.png")
unlink("test.html")
unlink("test.tex")


# unsupported formats
expect_warning(datasummary_skim(dat, output = "flextable"))
expect_warning(datasummary_skim(dat, output = "huxtable"))


# Issue #671: Do not indent title
mod <- lm(speed ~ dist, data = cars)
expect_snapshot_print(
  modelsummary(mod, title = "test", output = "markdown"),
  "output-title_not_indented"
)

##########################################
# "output: datasummary_correlation"
##########################################

# output format do not produce errors

# output formats do not produce errors
otp <- c(
  "gt",
  "kableExtra",
  "flextable",
  "huxtable",
  "html",
  "latex",
  "markdown"
)
for (o in otp) {
  datasummary_correlation(mtcars, output = o)
}

tmp <- mtcars
tmp$cyl <- as.factor(tmp$cyl)
tmp$vs <- as.logical(tmp$vs)
tmp$am <- as.character(tmp$am)
save_to_file <- function(ext = ".html") {
  msg <- paste("datasummary_correlation: save to", ext)
  random <- random_string()
  filename <- paste0(random, ext)
  datasummary_correlation(tmp, output = filename)
  unlink(filename)
}

for (ext in c(".html", ".tex", ".docx")) {
  save_to_file(ext)
}
